/**
 * Clase Aritmeticas.java
 * @author Paola Garcia 10205, Diego Yon 10070, Claudia Grajeda 10118
 * Algoritmos y estructura de datos
 * Fecha de entrega: 21 noviembre 2011
 */

public class Aritmeticas {

	public String operandos;
	public int cantidad;
	public double resultado;
	public char[] operandos1;
	public double operandos2;
	public double[] operandos3;
	public boolean x;
	public int pos2 =0;
	public int pos3 = 0;
	
	/**
	 * Clase constructora
	 * @param ope
	 * @param cant
	 */
	
	public Aritmeticas(String ope, int cant){
		operandos = ope;
		cantidad = cant;
		resultado = 0;
		operandos1 = operandos.toCharArray();
		operandos3 = new double[ope.length()];
		operandos2 = 0;		
	}
	
	/**
	 * Metodo donde se guardan los operandos en un vector
	 * @return double[]
	 */
	
	public double[] VectorOpernados(){
		pos3 = 0;
		for(int pos=0; pos < operandos.length(); pos++){
			if ((operandos1[pos] == ' ') || (operandos1[pos] == ')') ){
				operandos2 = Double.parseDouble(operandos.substring(pos2,pos));
				operandos3[pos3] = operandos2;
				pos3++;
				pos2= pos;
			}
		}
		return operandos3;
	}
	
	/**
	 * Metodo que resta numeros
	 * @param ope3
	 * @return double
	 */
	
	public double restar(double[] ope3){
		resultado = ope3[0];
		for (int pos = 1; pos <= pos3; pos++){
			resultado = resultado - ope3[pos];
		}
		return resultado;
	}
	
	/**
	 * Metodo que resta los numeros
	 * @param ope3
	 * @return double
	 */
	
	public double sumar(double[] ope3){
		resultado = ope3[0];
		for (int pos = 1; pos <= pos3; pos++){
			resultado = resultado + ope3[pos];
		}
		return resultado;
	}
	
	/**
	 * Metodo que multiplica los numeros
	 * @param ope3
	 * @return double
	 */
	
	public double multiplicar (double[] ope3){
		resultado = ope3[0];
		for (int pos = 1; pos < pos3; pos++){
			resultado = resultado * ope3[pos];
		}
		return resultado;
	}
	
	/**
	 * Metodo que divide los numeros
	 * @param ope3
	 * @return double
	 */
	
	public double dividir (double[] ope3){
		resultado = ope3[0];
		for (int pos = 1; pos < pos3; pos++){
			resultado = resultado / ope3[pos];
		}
		return resultado;
	}
	
	/**
	 * Metodo que compara si el numero es menor que el otro
	 * @param ope3
	 * @return boolean
	 */
	
	public boolean comparar_menor (double[] ope3){
		x = true; //suponemos que el primero es menor
		resultado = ope3[0];
		for(int pos = 1; pos < pos3; pos ++){
			if (resultado < ope3[pos]){
				if (x != false){
					x = true;
				}
			}
			else 
				x = false;
		}
		return x;
	}
	
	/**
	 * Metodo que compara si es mayor al siguiente numero
	 * @param ope3
	 * @return boolean
	 */
	
	public boolean comparar_mayor (double[] ope3){
		x = true; //suponemos q el primero es mayor
		resultado = ope3[0];
		for(int pos = 1; pos < pos3; pos ++){
			if (resultado > ope3[pos]){
				if (x != false){
					x = true;
				}
			}
			else {
				x = false;
			}
		}
		return x;
	}
	
	/**
	 * Metodo que compara si es menor o igual al otro numero
	 * @param ope3
	 * @return boolean
	 */
	
	public boolean comparar_menor_igual (double[] ope3){
		x = true; //suponemos que el primero es menor
		for(int pos = 0; pos < pos3-1; pos ++){
			if (ope3[pos] <= ope3[pos++]){
				if (x != false){
					x = true;
				}
			}
			else 
				x = false;
		}
		return x;
	}
	
	/**
	 * Metodo que compara si es mayor o igual al siguiente numero
	 * @param ope3
	 * @return boolean
	 */ 
	
	public boolean comparar_mayor_igual (double[] ope3){
		x = true; //suponemos q el primero es mayor
		resultado = ope3[0];
		for(int pos = 1; pos < pos3; pos ++){
			if (resultado >= ope3[pos]){
				if (x != false){
					x = true;
				}
			}
			else {
				x = false;
			}
		}
		return x;
	}
	
	/**
	 * Metodo que compara si son iguales los valores
	 * @param ope3
	 * @return boolean
	 */
	public boolean equal (double[] ope3){
		x = true; //suponemos que son iguales
		resultado = ope3[0];
		for(int pos = 1; pos < pos3; pos++){
			if(resultado == ope3[pos]){
			  if(x != false)
				  x = true;
			}
		    else
		    	x= false;
		   }
		return x;
	}
	
}
